const express = require("express");
const router = express.Router();
const userDB = require("../../database/userinfo.js");
const multer = require("multer");
const path = require("path"); //路径拼接


// 修改用户名信息，
// 鉴权 首先判断用户名是否登录
router.use((req, res, next) => {
  if (!req.session.userInfo) {
    return res.send({
      code: 7,
      message: "未登录，不能修该个人信息"
    });
  }
  next();
})


// 修改昵称
router.post("/user", async (req, res) => {
  console.log("后端监听修改的路由");
  let {
    user
  } = req.body;
  if (/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/.test(user)) {
    // 判断新名字与数据库中的用户名是否一致
    if (user === req.session.userInfo.user) {
      return res.send({
        code: 2,
        message: "新用户名不能与原用户名一致"
      })
    }

    //验证用户名是否已经被注册
    let userDoc = await userDB.findOne({
      user
    });
    if (userDoc) {
      return res.send({
        code: 3,
        message: "该用户名已被注册",
      })
    }

    // 修改数据库中该数据的用户名
    await userDB.findByIdAndUpdate(req.session.userInfo._id, {
      user
    });

    // 更新session里存储的用户名字
    req.session.userInfo.user = user;
    res.send({
      code: 0,
      message: "用户名修改成功",
      data: req.session.userInfo, //提供最新的数据给前端
    })
  } else {
    res.send({
      code: 2, //2代表数据格式不规范
      message: "您的数据格式不规范"
    });
  }
});

// 修改密码
router.post("/pass", async (req, res) => {
  let {
    pass1,
    pass2
  } = req.body;
  if (/^[a-zA-Z]\w{5,17}$/.test(pass2)) {
    // 比对新密码与旧密码是否一致
    if (pass1 === pass2) {
      return res.send({
        code: 4,
        message: "新旧密码不能相同",
      });
    }
    // 判断旧密码是否和数据库里的密码一致
    let doc = await userDB.findById(req.session.userInfo._id);
    if (doc.password !== pass1) {
      return res.send({
        code: 5,
        message: "原密码不正确",
      });
    };
    // 到数据库中修改密码内容
    await userDB.findByIdAndUpdate(req.session.userInfo._id, {
      password: pass2
    });
    req.session.destroy(); // 销毁当前的session，目的是为了修改密码后重新登录
    res.send({
      code: 0,
      message: "密码修改成功,请重新登录"
    })
  } else {
    res.send({
      code: 6,
      message: "你发过来的数据格式不规范"
    })
  }
});

// 修改头像
router.post("/photo", async (req, res) => {
  let name = null;
  // 配置multer中间件处理表单上传的图片文件
  let upload = multer({
    storage:multer.diskStorage({
      // 配置文件存储在服务器的哪个目录
      destination(req, file, callback) {
        callback(null, path.join(__dirname, "../../public/images/photo"));
      },
      // 设置文件的名字（为了防重名）
      filename(req, file, callback) {
        let {ext} = path.parse(file.originalname);
         name = req.session.userInfo._id + new Date().getTime() + ext;
        console.log(111111111111111111);
        callback(null, name);
      }
    })
  }).single("file");

  upload(req,res,async (err)=>{
    if(err){
      res.send({
        code:4,
        message:"头像上传失败"
      })
    }else{
      // 文件上传到指定目录
      // 改数据库里图片的路径
      // 
      let photo = `/images/photo/${name}`;
      await userDB.findByIdAndUpdate(req.session.userInfo._id,{photo});
      // 改session里图片的路径
      req.session.userInfo.photo = photo;
      // 响应前端
      res.send({
        code:0,
        message:"头像修改成功",
        data:req.session.userInfo
      })
    }
  })
  // res.send({
  //   code: 1,
  //   message: "这里是路由"
  // })
});


module.exports = router;